package display
{
	
	/**
	 * 人物
	 * @author gcxk721
	 * 2012-6-25
	 * 上午11:25:10
	 */
	public class QhRoleMovieClip extends QhMovieClip
	{
		
		/**
		 * 一个人物的所有帧数据 
		 */
		protected var frameLst : Vector.<Vector.<Vector.<QhBitmap>>>;
		
		/**
		 * 当前动作的帧数据
		 */
		protected var curActionLst : Vector.<Vector.<QhBitmap>>;
		
		/**
		 * 当前动作方向上的帧数据 
		 */
		protected var curDirLst : Vector.<QhBitmap>;
		
		/**
		 * 当前播放到的位置 
		 */
		private var index : int = -1;
		
		/**
		 * 当前的宽度 
		 */
		public var curWidth : int = 0;
		
		/**
		 * 当前的高度 
		 */
		public var curHeight : int = 0;
		
		public function QhRoleMovieClip()
		{
			super();
		}
		
		/**
		 * 设置帧
		 * 3维数组
		 * @param framsLst
		 *
		 */
		public function setRoleFrames(_framsLst : Vector.<Vector.<Vector.<QhBitmap>>>) : void 
		{
			frameLst = _framsLst;
			for (var i:int = 0; i < frameLst.length; i++) 
			{
				if(frameLst[i] != null)
				{
					for (var j:int = 0; j < frameLst[i].length; j++) 
					{
						if(frameLst[i][j] != null)
						{
							for (var k:int = 0; k < frameLst[i][j].length; k++) 
							{
								if (frameLst[i][j][k] != null)
								{
									frameLst[i][j][k].setParent(this);
								}
							}
						}
					}
				}
				
			}
		}
		
		/**
		 * 检查是否有当前的动作 
		 * @param act
		 * @return 
		 * 
		 */
		public function checkAction(act : int) : Boolean 
		{
			return frameLst[act] == null ? false : true;
		}
		
		/**
		 * 设置动作
		 * @param act
		 *
		 */
		public function setAction(act : int) : void 
		{
			curActionLst = frameLst[act];
		}
		
		/**
		 * 设置当前的方向
		 * @param dir
		 *
		 */
		public function setDirection(dir : int) : void 
		{
			if (curActionLst != null) 
			{
				curDirLst = curActionLst[dir];
			}
		}
		
		/**
		 * 检查方向中是否存在帧序列
		 * @param dir
		 * @return 
		 * 
		 */		
		public function checkDirection(dir : int) : Boolean 
		{
			return curActionLst[dir].length != 0;
		}
		
		/**
		 * 取得当前动作方向的帧长度 
		 * @return 
		 * 
		 */
		public function getActDirectionFrams() : int 
		{
			if (curDirLst != null)
			{
				return curDirLst.length;
			}
			return 0;
		}
		
		/**
		 * 设置跳帧 
		 * @param i
		 * 
		 */
		public function gotoActDirection(i : int) : void 
		{
			if (curDirLst != null && i <= curDirLst.length) 
			{
				if(showBitmap(curDirLst[i - 1]))
				{
					index = i;
				}
			}
		}
		
		/**
		 * 取得当前正在显示的帧数 
		 * @return 
		 * 
		 */
		public function getActDirection() : int 
		{
			return index;
		}
		
		/**
		 * 显示 
		 * @param bitmap
		 * 
		 */
		private function showBitmap(bitmap : QhBitmap) : Boolean 
		{
			if(bitmap != null)
			{
				curBitmap = bitmap;
				curWidth = bitmap.bmdWidth;
				curHeight = bitmap.bmdHeight;
				bmp.x = bitmap.x;
				bmp.y = bitmap.y;
				if(bitmap.bmd != null)
				{
					bmp.bitmapData = bitmap.bmd;
					return true;
				}
			}
			return false;
		}
		
		override public function released():Boolean
		{
			index = -1;
			frameLst = null;
			curDirLst = null;
			curActionLst = null;
			return super.released();
		}
		
		override public function cleanShow():void
		{
			curActionLst = null;
			curDirLst = null;
			super.cleanShow();
		}
		
	}
}